package _11_Polymorphic;
/**
 * 多态的好处,一'父'当关,万夫莫开
 * 
 * 参数使用父类声明,可以接收所有子类对象
 * 
 * 后续想要进行功能的扩展的时候,不需要改动源码
 * @author lenovo
 * @Date 2020年7月10日
 * @Time 下午7:01:14
 */
public class Poly_02 {

	public static void main(String[] args) {
		Cat c = new Cat();
		Dog d = new Dog();
		eat(c);
		eat(d);
	}

	public static void eat(Cat cat) {
		cat.eat();
	}

	public static void eat(Dog dog) {
		dog.eat();
	}

	public static void eat(Animal animal) {
		// 判断 animal 是否由 cat 实例化而来
		if (animal instanceof Cat) {
			// 向下转型
			Cat c1 = (Cat) animal;
			// 可以访问私有属性了
		} else if (animal instanceof Cat) {
			Dog d1 = (Dog) animal;
		}
		animal.eat();
	}
}

class Animal {
	public void eat() {
		System.out.println("动物吃东西!");
	}
}

class Cat extends Animal {
	int age = 10;

	public void eat() {
		System.out.println("猫吃鱼");
	}
}

class Dog extends Animal {
	int age = 20;

	public void eat() {
		System.out.println("狗吃肉");
	}
}

class xxxx extends Animal {
	@Override
	public void eat() {
		System.out.println(" ");
	}
}